#pragma once

// C Headers
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <math.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <pthread.h>
#include <semaphore.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/un.h>
#include <termios.h>
#include <time.h>
#include <unistd.h>
// C++ Headers
#include <cmath>
#include <cstring>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <string>
//
#include <Eigen>

#define __UNUSED(arg) (void)arg;

extern void logger_text(uint8_t echo, const char* fmt, ...);

// Local
#define LOGL(fmt, ...) logger_text(1, fmt, ##__VA_ARGS__)
// Remote
#define LOGR(fmt, ...) logger_text(2, fmt, ##__VA_ARGS__)
// Local & Remote
#define LOG(fmt, ...)  logger_text(3, fmt, ##__VA_ARGS__)

typedef enum
{
	PRIORITY_NONE = 0, // 优先级从1开始否则会pthread set schedparam error
	PRIORITY_WQ_LOW,   // 工作队列-低
	//
	PRIORITY_CONSOLE_HIST_SAVE, // 保存命令历史记录
	PRIORITY_CONSOLE,			// 控制台
	PRIORITY_SETTING_AUTO_SAVE, // 保存设置参数
	PRIORITY_SETTING,			// 设置
	PRIORITY_WIFI_TEXTLOG,		// 网络文本日志
	PRIORITY_MISSION,
	PRIORITY_TCPCLIENT,
	//
	PRIORITY_WQ_MID, // 工作队列-中
	//
	PRIORITY_UDPRECVER,
	//
	PRIORITY_WQ_HIGH, // 工作队列-高
} E_PRIORITY;

typedef enum
{
	E_CORE_0 = 0,
	E_CORE_1,
	E_CORE_CNT
} E_CORE;

#define WIFI_SSID		   "qfc"
#define WIFI_PASSWD		   "qfc12345"

#define WIFI_AP_NAME	   "qrc"
#define WIFI_AP_PWD		   "qrc12345"

#define WIFI_AP_ENABLE	   (0)
#define WIFI_STA_ENABLE	   (1)

#define TCP_TEXTLOG_ENABLE (0)
#define TCP_CLIENT_ENABLE  (0)

// 服务器IP地址
#define SERVER_IP		   "192.168.4.1"
// 本地设备IP地址
#define LOCAL_IP		   "192.168.4.125"

// TCP端口-普通指令
#define TCP_PORT		   23001
// TCP端口-显示日志
#define TCP_PORT_TEXTLOG   23002

// UDP端口-发送RC数据
#define UDP_PORT_SND_RC	   23005
